Esempio di trigger 1: esempio semplice
IL Robotics_Trigger.project
progetto di esempio qui descritto si trova nella directory di installazione di CODESYS Sotto ..\CODESYS SoftMotion\Examples
.
I trigger vengono utilizzati per scoprire esattamente quando un gruppo di assi raggiunge un punto specifico sul percorso comandato. Queste informazioni possono essere utilizzate, ad esempio, per accendere o spegnere uno strumento esattamente al momento giusto. Questo esempio mostra come un singolo trigger viene comandato su un movimento e quindi letto ciclicamente. Sulla base di ciò, il Esempio di trigger 2: processo di incollaggio mostra un'applicazione di esempio realistica.
Struttura dell'applicazione
L'applicazione è composta da due programmi: a Main_PRG
in esecuzione nell'attività del bus e a Planning_PRG
in esecuzione nell'attività di pianificazione del gruppo di assi. Inoltre, c'è anche una traccia.
Principale_PRG
:
IL Main_PRG
programma contiene la macchina a stati principale dell'applicazione. I primi due stati servono per l'inizializzazione e l'accensione degli azionamenti e del gruppo di assi. Nel STATE_COMMAND_MOVEMENT_WITH_TRIGGER
stato, un trigger viene prima preparato utilizzando un'istanza dal file SMC_GroupPrepareTrigger
blocco funzione. La posizione è specificata relativamente con un valore di 0,6. Di conseguenza, il grilletto viene posizionato nel punto in cui viene completato il 60% del movimento assegnato. Il trigger preparato viene assegnato al successivo movimento comandato. In questo esempio, un movimento lineare verso la posizione (X=20, Y=10) è comandato da an MC_MoveLinearAbsolute
.
prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative; prepTrigger.Position.MvtPosition := 0.6; prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE); moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);
Nel prossimo stato STATE_ENABLE_READ_TRIGGER
, un esempio di SMC_GroupReadTrigger
viene avviato per leggere lo stato del trigger comandato. Il collegamento con il trigger viene stabilito mediante il TriggerId
restituito da SMC_GroupPrepareTrigger
.
readTrigger.TriggerId := prepTrigger.TriggerId; readTrigger.Enable := TRUE;
Nel STATE_CHECK_TRIGGER
state, lo stato del trigger viene infine verificato ciclicamente. Non appena SMC_GroupReadTrigger
rapporti Active
come stato è possibile leggere la durata fino al raggiungimento del trigger. La durata si riferisce sempre all'inizio del ciclo in corso. Pertanto, il trigger viene raggiunto nel ciclo corrente se la durata è inferiore al tempo di ciclo (in questo esempio, 0,004 s):
IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN triggerFired := TRUE; ... END_IF END_IF
Pianificazione_PRG
Nel Planning_PRG
programma, la durata prevista della pianificazione è configurata tramite il SMC_TuneCPKernel
blocco funzione. IL SMC_GroupReadTrigger
il blocco funzione può emettere quando viene raggiunta la durata prevista di un trigger. Nell'esempio, la durata della previsione è impostata su 0,1 s. Pertanto, lo stato del SMC_GroupReadTrigger
il blocco funzione cambia in Active
0,1 s prima che il gruppo di assi raggiunga il trigger e da quel momento in poi emetta una durata valida.
tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);
Traccia
La traccia può essere utilizzata per tenere traccia del comportamento del file SMC_GroupReadTrigger
blocco funzione.
Nel primo diagramma si vede che viene eseguito un movimento da (X=0, Y=0) a (X=20, Y=10). Il grilletto si trova nella posizione relativa 0.6 sul movimento, cioè in (X=12, Y=6).
Il secondo diagramma mostra il valore di triggerTime
uscita da SMC_GroupReadTrigger
. Il valore salta a 0,1 s perché la durata prevista della pianificazione è 0,1 s, quindi scende linearmente fino a raggiungere il valore 0 nella posizione (X=12, Y=6).
Il terzo diagramma mostra il valore del triggerFired
variabile impostata in STATE_CHECK_TRIGGER
stato di Main_PRG
non appena il gruppo di assi si trova a meno di 0,004 s dal trigger.